export default class NumberUtils {
  static stringToFloat(str, defaultValue = 0.0) {
    if (str === null || str === undefined || typeof str === 'boolean') {
      return defaultValue;
    }
    const stringValue = String(str);
    const floatValue = parseFloat(stringValue);
    if (isNaN(floatValue)) {
      if (stringValue.trim() !== '') {
        console.warn(`stringToFloat: Could not parse "${stringValue}" into a valid float. Returning default value.`);
      }
      return defaultValue;
    }

    return floatValue;
  }

  ///string转成int
  static stringToInt(str, defaultValue = 0) {
    if (str === null || str === undefined || typeof str === 'boolean') {
      return defaultValue;
    }
    const stringValue = String(str);
    const intValue = parseInt(stringValue, 10);
    if (isNaN(intValue)) {
      if (stringValue.trim() !== '') {
        console.warn(`stringToInt: Could not parse "${stringValue}" into a valid integer. Returning default value.`);
      }
      return defaultValue;
    }
    return intValue;
  }
  //把字符串转成数字，去掉无效0
  static stringToNumber(str: any, defaultValue: number = 0): number {
    // 1. 处理明确不应转换为数字的类型或值
    if (str === null || str === undefined || typeof str === 'boolean' || String(str).trim() === "") {
      return defaultValue;
    }

    // 2. 尝试转换
    //    如果 str 本身就是数字类型，直接使用它
    if (typeof str === 'number') {
      return isNaN(str) ? defaultValue : str; // 处理 NaN 数字输入
    }

    //    如果 str 是字符串，尝试 parseFloat
    if (typeof str === 'string') {
      const num = parseFloat(str);
      // 检查转换结果是否为 NaN
      if (isNaN(num)) {
        return defaultValue; // 如果解析失败 (如 "abc")，返回 defaultValue
      }
      return num; // 解析成功，返回数字
    }

    // 3. 对于其他未明确处理的类型，返回 defaultValue
    return defaultValue;
  }
  ///

  static isActuallyNumber(value:number|null|undefined){
    return !(value === null || typeof value === 'undefined');
  }

  static multiplyStrings(str1: any, str2: any, defaultValue: number = 0): number {
    const num1 = this.stringToFloat(str1, defaultValue);
    const num2 = this.stringToFloat(str2, defaultValue);
    return num1 * num2;
  }


}
